-- USUARIOS
INSERT INTO usuario (id, ativo, login, nome, senha, versao) VALUES 
 (1, 'true', 'foxinline', 'FoxInline', '8a705774b02a946e74d7e3cd744c8df1', 1), -- Senha: foxInlineAdmin
 (2, 'true', 'admin', 'admin', '21232f297a57a5a743894a0e4a801fc3', 1), -- Senha: admin
 (3, 'true', 'admin_tabulario', 'Admin Tabulario', '21232f297a57a5a743894a0e4a801fc3', 1); -- Senha: admin

-- GRUPOS
INSERT INTO grupo (id, nome, descricao, versao, projetotabularium, projetotabulario, ativo) VALUES
 (1, 'foxinline', 'FonxInline', 1, True, True, True),

 (2,  'administrador_tabularium', 'Administrador Tabularium', 1, True, False, True),
 (3,  'usuario_tabularium', 'Usuário Tabularium', 1, True, False, True),
 
 (4,  'administrador_tabulario', 'Administrador Tabulario', 1, False, True, True),
 (5,  'usuario_tabulario', 'Usuário Tabulario', 1, False, True, True),

 (6,  'criar_protocolo', 'Criar Protocolo', 1, True, False, True),
 (7,  'editar_protocolo', 'Editar Protocolo', 1, True, False, True),
 (8,  'visualizar_protocolo', 'Visualizar Protocolo', 1, True, False, True),

 (9,  'criar_secretaria', 'Criar Secretaria', 1, True, False, True),
 (10, 'editar_secretaria', 'Editar Secretaria', 1, True, False, True),
 (11, 'visualizar_secretaria', 'Visualizar Secretaria', 1, True, False, True),

 (12, 'criar_certidao_obito', 'Criar Sertidão de Óbito', 1, True, False, True),
 (13, 'editar_certidao_obito', 'Editar Sertidão de Óbito', 1, True, False, True),
 (14, 'visualizar_certidao_obito', 'Visualizar Sertidão de Óbito', 1, True, False, True),

 (15, 'criar_cliente', 'Criar Cliente', 1, True, False, True),
 (16, 'editar_cliente', 'Editar Cliente', 1, True, False, True),
 (17, 'visualizar_cliente', 'Visualizar Cliente', 1, True, False, True),

 (18, 'criar_declaracao', 'Criar Declaração Nascidos Vivos', 1, True, False, True),
 (19, 'editar_declaracao', 'Editar Declaração Nascidos Vivos', 1, True, False, True),
 (20, 'visualizar_declaracao', 'Visualizar Declaração Nascidos Vivos', 1, True, False, True),

 (21, 'criar_folha_pagamento', 'Criar Folha de Pagamento', 1, True, False, True),
 (22, 'editar_folha_pagamento', 'Editar Folha de Pagamento', 1, True, False, True),
 (23, 'visualizar_folha_pagamento', 'Visualizar Folha de Pagamento', 1, True, False, True),

 (24, 'criar_portaria', 'Criar Portaria', 1, True, False, True),
 (25, 'editar_portaria', 'Editar Portaria', 1, True, False, True),
 (26, 'visualizar_portaria', 'Visualizar Portaria', 1, True, False, True),

 (27, 'criar_usuario', 'Criar Usuario', 1, True, True, True),
 (28, 'editar_usuario', 'Editar Usuario', 1, True, True, True),
 (29, 'visualizar_usuario', 'Visualizar Usuario', 1, True, True, True),

 (30, 'criar_arquivo', 'Criar Arquivo', 1, True, False, True),
 (31, 'editar_arquivo', 'Editar Arquivo', 1, True, False, True),
 (32, 'visualizar_arquivo', 'Visualizar Arquivo', 1, True, False, True),

 (33, 'criar_empresa', 'Criar Empresa', 1, False, True, True),
 (34, 'editar_empresa', 'Editar Empresa', 1, False, True, True),
 (35, 'visualizar_empresa', 'Visualizar Empresa', 1, False, True, True),

 (36, 'criar_projeto', 'Criar Projeto', 1, False, True, True),
 (37, 'editar_projeto', 'Editar Projeto', 1, False, True, True),
 (38, 'visualizar_projeto', 'Visualizar Projeto', 1, False, True, True),

 (39, 'empresa', 'Empresa', 1, Null, Null, True);

-- USUARIOS_GRUPO
INSERT INTO usuario_grupo VALUES 
 (1, 1), -- Usuário foxinline / Grupo foxinline
 (2, 2), -- Usuário admin / Grupo administrador_tabularium
 (3, 4); -- Usuário admin2 / Grupo administrador_tabulario

-- VIEW
CREATE OR REPLACE VIEW v_usuario_grupo AS
SELECT u.login AS username, g.nome AS grupo, u.senha AS senha
FROM usuario u, grupo g, usuario_grupo ug
WHERE u.id = ug.usuarios_id AND g.id = ug.grupos_id 
	AND u.ativo = true;


-- CONFIGURAÇÕES
INSERT INTO configuracao (id, gerarnumeroautomatico, projetotabulario, projetotabularium) VALUES
(1, False, False, False);

CREATE SEQUENCE NumeroProtocoloSequence;

CREATE OR REPLACE FUNCTION NumeroProtocoloFunction()
RETURNS "trigger" AS
$BODY$
declare
  dataAtual text;
  dataProtocolo text;
  numeroProtocolo text;

BEGIN
	dataAtual := (SELECT date_part('year', current_date)); --Seleciona o ano atual
	dataProtocolo := (SELECT date_part('year', New.datacadastro)); --Seleciona o ano do protocolo a ser cadastrado

	IF dataAtual <> dataProtocolo THEN
		--Reinicia o sequence para 1 caso a data atual seja diferente que a data do protocolo
		EXECUTE 'ALTER SEQUENCE NumeroProtocoloSequence RESTART WITH 1;';
	END IF;

	numeroProtocolo := concat(nextval('NumeroProtocoloSequence'), dataProtocolo);

	--RAISE NOTICE 'Número do protocolo : %', numeroProtocolo;

	New.numero := CAST(numeroProtocolo AS integer);

	Return NEW;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

CREATE TRIGGER NumeroProtocoloTrigger
BEFORE INSERT
ON protocolo
FOR EACH ROW
EXECUTE PROCEDURE NumeroProtocoloFunction();
